#ifndef AVALON_ZLIBENCODER_HPP
#define AVALON_ZLIBENCODER_HPP
#include "Avalon/Codecs/Encoder.hpp"

namespace Avalon {
namespace Codecs {

  /*! \class ZLibEncoder
   *  \brief Encodes using ZLib compression.
   */
  class ZLibEncoder : public Encoder {
    public:

      //! Constructs a ZLibEncoder.
      ZLibEncoder();

      virtual ~ZLibEncoder();

      virtual bool IsEncodeInPlaceSupported() const;

      virtual void Encode(const void* source, int sourceSize, void* destination,
        int destinationSize, Out<int> encodedSize);

      virtual void Encode(const void* source, int sourceSize,
        IO::Buffer* destination, Out<int> encodedSize);

      using Encoder::Encode;
  };
}
}

#endif // AVALON_ZLIBENCODER_HPP
